package command;

import ihm.Editeur;
import moteur.Impl_Moteur;
import enregistrement.Enregistrable;
import enregistrement.Enregistreur;
import enregistrement.Impl_Memento;
import enregistrement.Memento;

public class InsererText implements Command, Enregistrable {
	public Impl_Moteur moteur;
	private Editeur ihm;
	public Memento memento;
	private Enregistreur enregistreur;
	private char text;

	public InsererText(Impl_Moteur moteur, Editeur ihm,
			Enregistreur enregistreur) {
		this.moteur = moteur;
		this.enregistreur = enregistreur;
		this.ihm = ihm;
		// this.text = ihm.getCharInsere();
	}

	public void execute() {

		boolean etatE = enregistreur.getEtat();
		if (etatE == true) {

			enregistreur.ajouterCommand(creerMemento());
			moteur.insererText(ihm.getCharInsere());
			// System.out.println("le char inserer :" + ihm.getCharInsere());
			// System.out.println("le size de listmemento:" +
			// enregistreur.getListSize());

		} else {
			if (enregistreur.getListSize() == 0) {

				// this.text = ihm.getCharInsere();
				moteur.insererText(ihm.getCharInsere());
				// System.out.println("le char inserer :" +
				// ihm.getCharInsere());
				// System.out.println("le size de listmemento:" +
				// enregistreur.getListSize());
			} else {

				moteur.insererText(text);
				// System.out.println("le char inserer :" + text);
				// System.out.println("i will test it");

				moteur.mettreAJourIHM();
			}
		}

		// System.out.println("le buffer :" +
		// moteur.getBuffer().getZoneDeTravail());

		moteur.saveState();
	}

	@Override
	public void setMemento(Memento m) {
		moteur = m.getEtatMoteur();
		text = m.getText();

	}

	@Override
	public Memento creerMemento() {
		return new Impl_Memento(moteur, ihm.getCharInsere(), this);
	}
}
